package com.toonan.system.controller;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.toonan.core.cache.WebplusCache;
import com.toonan.core.constant.WebplusCons;
import com.toonan.core.matatype.Dto;
import com.toonan.core.matatype.Dtos;
import com.toonan.core.util.WebplusUtil;
import com.toonan.core.vo.PageResult;
import com.toonan.core.vo.R;
import com.toonan.core.vo.UserToken;
import com.toonan.core.web.BaseController;
import com.toonan.system.constant.SystemCons;
import com.toonan.system.model.Param;
import com.toonan.system.service.ParamService;
import com.toonan.system.util.SystemCache;

/**
 * 
 * @ClassName:  ParamController   
 * @Description:TODO
 * @author: 陈骑元（chenqiyuan@toonan.com)
 * @date:   2022年2月15日 下午10:36:01     
 * @Copyright: 2022 www.toonan.com Inc. All rights reserved. 
 * 注意：本内容仅限于广州市图南软件有限公司内部传阅，禁止外泄以及用于其他的商业目
 */
@Controller
@RequestMapping("/system/param")
public class ParamController extends BaseController {
	
	
	     @Autowired
	    private ParamService paramService;
		
        /**
         * 
         * 简要说明：分页查询
         * 编写者：陈骑元（chenqiyuan@toonan.com）
         * 创建时间： 2022年2月15日 下午10:42:06 
         * @param 说明
         * @return 说明
         */
	     @RequiresPermissions("system:param:param")
		@RequestMapping("list")
		@ResponseBody
		public R list() {
			Dto pDto = Dtos.newDto(request);
			PageResult page =paramService.findPage(pDto);
			WebplusCache.convertItem(page);
			return R.toPage(page);
		}
		/**
		 * 
		 * 简要说明： 新增信息保存 
		 * 编写者：陈骑元
		 * 创建时间：2018-04-12
		 * @param 说明
		 * @return 说明
		 */
	    @RequiresPermissions("system:param:add")
		@PostMapping("save")
		@ResponseBody
		public R save(Param param) {
	    	String userId=this.getUserId();
			boolean checkResult=  paramService.checkParamKeyUnion(param.getParamKey());
			if(checkResult){
				return R.warn("参数键已被占用，请修改其它参数键再保存。");
			}
			param.setCreateBy(userId);
			param.setUpdateBy(userId);
			param.setCreateTime(WebplusUtil.getDateTime());
			param.setUpdateTime(WebplusUtil.getDateTime());
			boolean result = paramService.insert(param);
			if (result) {
				SystemCache.cacheParam(param.getParamKey());
				return R.ok();
			} else {
				return R.error("保存失败");
			}

		}
	    /**
		 * 
		 * 简要说明： 跳转到编辑页面 
		 * 编写者：陈骑元
		 * 创建时间：2018-04-12
		 * @param 说明
		 * @return 说明
		 */
	    @RequiresPermissions("system:param:edit")
		@PostMapping("edit")
		@ResponseBody
		public R edit(String id) {
			Param param=paramService.selectById(id);
			return R.toData(param);
		}
	    /**
		 * 
		 * 简要说明：删除信息
		 * 编写者：陈骑元
		 * 创建时间：2018-04-12
		 * @param 说明
		 * @return 说明
		 */
		@RequiresPermissions("system:param:remove")
		@PostMapping("remove")
		@ResponseBody
		public R remove(String id) {
			Param param=paramService.selectById(id);
			UserToken userToken=this.getUserToken();
			if(WebplusCons.EDITMODE_READ.equals(param.getEditMode())
					&&!SystemCons.SUPER_ADMIN.equals(userToken.getAccount())){
				
				return R.warn("当前删除的键值参数数据为只读，只读的数据不能修改和删除");
			}
			boolean result = paramService.removeId(id);
			if (result) {
				SystemCache.removeCacheParam(param.getParamKey());
				return R.ok();
			} else {
				return R.error("删除失败");
			}
			
		}
		/**
		 * 
		 * 简要说明：修改信息
		 * 编写者：陈骑元
		 * 创建时间：2018-04-12
		 * @param 说明
		 * @return 说明
		 */
	    @RequiresPermissions("system:param:edit")
		@PostMapping("update")
		@ResponseBody
		public R update(Param param,String oldParamKey) {
	    	String userId=this.getUserId();
			if(WebplusUtil.isNotEmpty(oldParamKey)){
				if(!oldParamKey.equals(param.getParamKey())){
					
					boolean checkResult=  paramService.checkParamKeyUnion(param.getParamKey());
					if(checkResult){
						return R.warn("参数键已被占用，请修改其它参数键再保存。");
					}
					SystemCache.removeCacheParam(oldParamKey);
				}
				
			}
			param.setUpdateBy(userId);
			param.setUpdateTime(WebplusUtil.getDateTime());
			boolean result = paramService.updateById(param);
			if (result) {
				String paramKey=param.getParamKey();
				if(WebplusUtil.isEmpty(paramKey)){
					Param paramEntity=paramService.selectById(param.getParamId());
					paramKey=paramEntity.getParamKey();
				}
				SystemCache.cacheParam(paramKey);
				return R.ok();
			} else {
				return R.error("更新失败");
			}
			
		}
    
		/**
		 * 
		 * 简要说明：刷新键值参数缓存
		 * 编写者：陈骑元
		 * 创建时间：2018年5月13日 下午11:09:04
		 * @param 说明
		 * @return 说明
		 */
		@RequiresPermissions("system:param:refreshCache")
		@PostMapping("refreshParam")
		@ResponseBody
		public R refreshParam() {
			SystemCache.refreshParam();
		    
			return R.ok("刷新键值参数缓存操作成功");
		}
		
}
